﻿
namespace Codemonk.Common.Injection
{
    /// <summary>
    /// 容器注入接口
    /// </summary>
    public interface IContainerBuilder
    {
        /// <summary>
        /// 设置需要注入的类型
        /// </summary>
        /// <typeparam name="T">需要注入的类型</typeparam>
        void RegisterType<T>(LifeStyle style);
        /// <summary>
        /// 注册类型T到接口I上
        /// </summary>
        /// <typeparam name="T">要是用的类型</typeparam>
        /// <typeparam name="I">被注入的类型</typeparam>
        /// <param name="style">对象的生命周期</param>
        void Regist<T, I>(LifeStyle style);
        /// <summary>
        /// 注入一个实例
        /// </summary>
        /// <typeparam name="T">要注入的类型</typeparam>
        /// <param name="instance">类型实例</param>
        void RegisterInstance<T>(T instance);
        /// <summary>
        /// 使用固定的函数创建对象
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="creater">创建方式</param>
        void Register<T>(System.Func<T> creater, LifeStyle style);
        /// <summary>
        /// 解析接口I的一个实例
        /// </summary>
        /// <typeparam name="I">接口I的类型</typeparam>
        /// <returns>接口I的一个实例</returns>
        I Resolve<I>();
    }
}
